/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package earleyalgorithm;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Set;

/**
 *
 * @author NGOC
 */
public class Table {
    private int index;
    private ArrayList<DottedRule> dottedRules;

    public Table(int index){
        this.index = index;
        dottedRules = new ArrayList<DottedRule>();
    }

    public ArrayList<DottedRule> getDottedRules(Set<String> types){
        ArrayList<DottedRule> list = new ArrayList<DottedRule>();
        for(int i = 0; i < dottedRules.size(); i++){
            Iterator<String> itr = types.iterator();
            DottedRule r = dottedRules.get(i);
            while(itr.hasNext()){
                if(r.isClassType(itr.next())){
                    if(!list.contains(r))
                        list.add(r);
                }
            }
        }
        return list;
    }

    /**
     * @return the index
     */
    public int getIndex() {
        return index;
    }

    /**
     * @param index the index to set
     */
    public void setIndex(int index) {
        this.index = index;
    }
    
    /**
     * @return the dottedRules
     */
    public ArrayList<DottedRule> getDottedRules() {
        return dottedRules;
    }

    /**
     * @param dottedRules the dottedRules to set
     */
    public void setDottedRules(ArrayList<DottedRule> dottedRules) {
        this.dottedRules = dottedRules;
    }

    public boolean addDottedRule(DottedRule rule){
        if(!dottedRules.contains(rule))
            return dottedRules.add(rule);
        return false;
    }

    @Override
    public boolean equals(Object obj){
        if(obj instanceof Table){
            Table tb = (Table)obj;
            return (index == tb.getIndex());
        }
        return false;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 67 * hash + this.index;
        return hash;
    }

    @Override
    public String toString(){
        StringBuilder sb = new StringBuilder("Table ");
        sb.append(index);
        sb.append("\n");
        sb.append("------------------------------------");
        sb.append("\n");
        for(int i = 0; i < dottedRules.size(); i++){
            sb.append(dottedRules.get(i).toString());
            sb.append("\n");
        }
        return sb.toString();
    }
}
